Micron Document
C.S.Burner 🪙 ━►🔥GIT Node


Displaying Raw • Download

meshchatx/src/frontend/components/interfaces/Interface.vue 67e78aa299d1bde9de61fcc4dc3e95a36eeb92d6 (67e78aa2) Text, 20.29 KB

Ta5d6ff<!-- Te6edf3SPDX-License-IdentifierTb4b4b4: Ta5d6ff0BSD Ta5d6ffAND Ta5d6ffMIT Ta5d6ff-->

Ta5d6ff<template>
Ta5d6ff<div
Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffinterface-card min-w-0 transition-all duration-300Ta5d6ff"
Tb4b4b4:Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ff{
'opacity-60 grayscale-[0.5]': !isInterfaceEnabled(iface) || iface._restart_required || !isReticulumRunning,
'border-amber-500 ring-amber-500 ring-2':
iface._restart_required && showRestartBanner && isReticulumRunning,
}Ta5d6ff"
Ta5d6ff>
Ta5d6ff<div Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffflex flex-col sm:flex-row gap-4 sm:items-start relative pt-11 sm:pt-0Ta5d6ff"Ta5d6ff>
Ta5d6ff<!-- Ta5d6ffOffline Ta5d6ffOverlay Ta5d6ff-->
Ta5d6ff<div
Ta5d6ffv-ifTb4b4b4=Ta5d6ff"Ta5d6ff!isReticulumRunningTa5d6ff"
Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffabsolute inset-0 z-10 flex items-center justify-center bg-white/20 dark:bg-zinc-900/20 backdrop-blur-[0.5px] rounded-3xl pointer-events-noneTa5d6ff"
Ta5d6ff>
Ta5d6ff<div
Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffbg-red-500/90 text-white px-3 py-1.5 rounded-full shadow-lg flex items-center gap-2 text-[10px] font-bold uppercase tracking-widerTa5d6ff"
Ta5d6ff>
Ta5d6ff<MaterialDesignIcon Ta5d6fficon-nameTb4b4b4=Ta5d6ff"Ta5d6fflan-disconnectTa5d6ff" Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffw-3.5 h-3.5Ta5d6ff" Ta5d6ff/>
Ta5d6ff<span>Reticulum Ta5d6ffOffline</span>
Ta5d6ff</div>
Ta5d6ff</div>

Ta5d6ff<!-- Ta5d6ffRestart Ta5d6ffRequired Ta5d6ffOverlay Ta5d6ff-->
Ta5d6ff<div
Ta5d6ffv-ifTb4b4b4=Ta5d6ff"Ta5d6ffisReticulumRunning && iface._restart_requiredTa5d6ff"
Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffabsolute inset-0 z-10 flex items-center justify-center bg-white/20 dark:bg-zinc-900/20 backdrop-blur-[0.5px] rounded-3xl pointer-events-noneTa5d6ff"
Ta5d6ff>
Ta5d6ff<div
Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffbg-amber-500/90 text-white px-3 py-1.5 rounded-full shadow-lg flex items-center gap-2 text-[10px] font-bold uppercase tracking-widerTa5d6ff"
Ta5d6ff>
Ta5d6ff<MaterialDesignIcon Ta5d6fficon-nameTb4b4b4=Ta5d6ff"Ta5d6ffrestartTa5d6ff" Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffw-3.5 h-3.5Ta5d6ff" Ta5d6ff/>
Ta5d6ff<span>{{ Te6edf3$t("interfaces.restart_required") Ta5d6ff}}</span>
Ta5d6ff</div>
Ta5d6ff</div>

Ta5d6ff<div Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffflex gap-4 min-w-0 flex-1 sm:flex-initialTa5d6ff"Ta5d6ff>
Ta5d6ff<div Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffinterface-card__icon shrink-0Ta5d6ff"Ta5d6ff>
Te6edf3<MaterialDesignIcon Tb4b4b4:Ta5d6fficon-nameTb4b4b4=Ta5d6ff"Ta5d6fficonNameTa5d6ff" Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffw-6 h-6Ta5d6ff" Ta5d6ff/>
Ta5d6ff</div>
Ta5d6ff<div Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffflex-1 min-w-0 space-y-2 overflow-hiddenTa5d6ff"Ta5d6ff>
Ta5d6ff<div Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffflex items-center gap-2 flex-wrapTa5d6ff"Ta5d6ff>
Ta5d6ff<div Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6fftext-lg font-semibold text-gray-900 dark:text-white truncate min-w-0Ta5d6ff"Ta5d6ff>
Ta5d6ff{{ Ta5d6ffiface._name Ta5d6ff}}
Ta5d6ff</div>
Ta5d6ff<span Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6fftype-chip shrink-0Ta5d6ff"Ta5d6ff>{{ Ta5d6ffiface.type Ta5d6ff}}</span>
Te6edf3<span Tb4b4b4:Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffstatusChipClassTa5d6ff" Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffshrink-0Ta5d6ff"Ta5d6ff>{{
Ta5d6ffisInterfaceEnabled(iface) Ta5d6ff? Te6edf3$t("app.enabled") Tb4b4b4: Te6edf3$t("app.disabled")
Ta5d6ff}}</span>
Ta5d6ff<span
Ta5d6ffv-ifTb4b4b4=Ta5d6ff"Ta5d6ffisReticulumRunning && isInterfaceEnabled(iface)Ta5d6ff"
Tb4b4b4:Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffifaceLinkStatusChipClassTa5d6ff"
Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffshrink-0Ta5d6ff"
Ta5d6ff>{{ Ta5d6ffifaceLinkStatusLabel Ta5d6ff}}</span
Ta5d6ff>
Ta5d6ff<span Ta5d6ffv-ifTb4b4b4=Ta5d6ff"Ta5d6ffisDiscoverable()Ta5d6ff" Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffdiscoverable-chip shrink-0Ta5d6ff"Ta5d6ff>Discoverable</span>
Ta5d6ff</div>
Ta5d6ff<div Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6fftext-sm text-gray-600 dark:text-gray-300 wrap-break-word min-w-0Ta5d6ff"Ta5d6ff>
Ta5d6ff{{ Ta5d6ffdescription Ta5d6ff}}
Ta5d6ff</div>
Ta5d6ff<div Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffflex flex-wrap gap-2 text-xs text-gray-600 dark:text-gray-300Ta5d6ff"Ta5d6ff>
Ta5d6ff<span Ta5d6ffv-ifTb4b4b4=Ta5d6ff"Ta5d6ffiface._stats?.bitrateTa5d6ff" Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffstat-chipTa5d6ff"
Ta5d6ff>{{ Te6edf3$t("interface.bitrate") Ta5d6ff}} Ta5d6ff{{ Ta5d6ffformatBitsPerSecond(iface._stats?.bitrate Ta5d6ff?? Ta5d6ff0) Ta5d6ff}}</span
Ta5d6ff>
Ta5d6ff<span Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffstat-chipTa5d6ff" Tb4b4b4:Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ff{ 'stat-chip--zero-traffic': isIfaceStatBytesZero('txb') }Ta5d6ff"
Ta5d6ff>{{ Te6edf3$t("interface.tx") Ta5d6ff}} Ta5d6ff{{ Ta5d6ffformatBytes(iface._stats?.txb Ta5d6ff?? Ta5d6ff0) Ta5d6ff}}</span
Ta5d6ff>
Ta5d6ff<span Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffstat-chipTa5d6ff" Tb4b4b4:Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ff{ 'stat-chip--zero-traffic': isIfaceStatBytesZero('rxb') }Ta5d6ff"
Ta5d6ff>{{ Te6edf3$t("interface.rx") Ta5d6ff}} Ta5d6ff{{ Ta5d6ffformatBytes(iface._stats?.rxb Ta5d6ff?? Ta5d6ff0) Ta5d6ff}}</span
Ta5d6ff>
Ta5d6ff<span Ta5d6ffv-ifTb4b4b4=Ta5d6ff"Ta5d6ffiface.type === 'RNodeInterface' && iface._stats?.noise_floorTa5d6ff" Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffstat-chipTa5d6ff"
Ta5d6ff>{{ Te6edf3$t("interface.noise") Ta5d6ff}} Ta5d6ff{{ Ta5d6ffiface._stats?.noise_floor Ta5d6ff}} Ta5d6ffdBm</span
Ta5d6ff>
Ta5d6ff<span Ta5d6ffv-ifTb4b4b4=Ta5d6ff"Ta5d6ffiface._stats?.clients != nullTa5d6ff" Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffstat-chipTa5d6ff"
Ta5d6ff>{{ Te6edf3$t("interface.clients") Ta5d6ff}} Ta5d6ff{{ Ta5d6ffiface._stats?.clients Ta5d6ff}}</span
Ta5d6ff>
Ta5d6ff</div>
Ta5d6ff<div Ta5d6ffv-ifTb4b4b4=Ta5d6ff"Ta5d6ffiface._stats?.ifac_signatureTa5d6ff" Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffifac-lineTa5d6ff"Ta5d6ff>
Ta5d6ff<span Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6fftext-emerald-500 font-semiboldTa5d6ff"Ta5d6ff>{{ Ta5d6ffiface._stats.ifac_size Ta5d6ff* T79c0ff8 Ta5d6ff}}-bit Ta5d6ffIFAC</span>
Ta5d6ff<span Ta5d6ffv-ifTb4b4b4=Ta5d6ff"Ta5d6ffiface._stats?.ifac_netnameTa5d6ff"Ta5d6ff>• Ta5d6ff{{ Ta5d6ffiface._stats.ifac_netname Ta5d6ff}}</span>
Ta5d6ff<span>•</span>
Ta5d6ff<button
Ta5d6fftypeTb4b4b4=Ta5d6ff"Ta5d6ffbuttonTa5d6ff"
Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6fftext-blue-500 hover:underlineTa5d6ff"
Ta5d6ff@clickTb4b4b4=Ta5d6ff"Ta5d6ffonIFACSignatureClick(iface._stats.ifac_signature)Ta5d6ff"
Ta5d6ff>
Ta5d6ff<span Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6fffont-monoTa5d6ff"Ta5d6ff>{{ Ta5d6ffiface._stats.ifac_signature.slice(0, Ta5d6ff8) Ta5d6ff}}</span
Ta5d6ff>…<span Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6fffont-monoTa5d6ff"Ta5d6ff>{{ Ta5d6ffiface._stats.ifac_signature.slice(-8) Ta5d6ff}}</span>
Ta5d6ff</button>
Ta5d6ff</div>
Ta5d6ff</div>
Ta5d6ff</div>
Ta5d6ff<div
Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffflex flex-row items-center gap-1 sm:relative sm:z-auto sm:flex sm:flex-row sm:gap-2 sm:items-center sm:shrink-0 sm:justify-end mt-4 sm:mt-0Ta5d6ff"
Ta5d6ff>
Ta5d6ff<button
Ta5d6ffv-ifTb4b4b4=Ta5d6ff"Ta5d6ffisInterfaceEnabled(iface)Ta5d6ff"
Ta5d6fftypeTb4b4b4=Ta5d6ff"Ta5d6ffbuttonTa5d6ff"
Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffinline-flex items-center justify-center rounded-full p-2 min-w-[44px] min-h-[44px] sm:min-w-0 sm:min-h-0 shrink-0 border-0 bg-transparent text-gray-600 dark:text-zinc-300 hover:bg-gray-100 dark:hover:bg-zinc-800 transition-colorsTa5d6ff"
Tb4b4b4:Te6edf3titleTb4b4b4=Ta5d6ff"Ta5d6ff$t('interface.disable')Ta5d6ff"
Ta5d6ff@clickTb4b4b4=Ta5d6ff"Ta5d6ffdisableInterfaceTa5d6ff"
Ta5d6ff>
Ta5d6ff<MaterialDesignIcon Ta5d6fficon-nameTb4b4b4=Ta5d6ff"Ta5d6ffpowerTa5d6ff" Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffw-5 h-5 sm:w-4 sm:h-4Ta5d6ff" Ta5d6ff/>
Ta5d6ff<span Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffhidden sm:inline sm:ml-1.5 text-xs font-semiboldTa5d6ff"Ta5d6ff>{{ Te6edf3$t("interface.disable") Ta5d6ff}}</span>
Ta5d6ff</button>
Ta5d6ff<button
Ta5d6ffv-else
Ta5d6fftypeTb4b4b4=Ta5d6ff"Ta5d6ffbuttonTa5d6ff"
Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffinline-flex items-center justify-center rounded-full p-2 min-w-[44px] min-h-[44px] sm:min-w-0 sm:min-h-0 shrink-0 border-0 bg-transparent text-green-600 dark:text-green-400 hover:bg-gray-100 dark:hover:bg-zinc-800 transition-colorsTa5d6ff"
Tb4b4b4:Te6edf3titleTb4b4b4=Ta5d6ff"Ta5d6ff$t('interface.enable')Ta5d6ff"
Ta5d6ff@clickTb4b4b4=Ta5d6ff"Ta5d6ffenableInterfaceTa5d6ff"
Ta5d6ff>
Ta5d6ff<MaterialDesignIcon Ta5d6fficon-nameTb4b4b4=Ta5d6ff"Ta5d6ffpowerTa5d6ff" Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffw-5 h-5 sm:w-4 sm:h-4Ta5d6ff" Ta5d6ff/>
Ta5d6ff<span Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffhidden sm:inline sm:ml-1.5 text-xs font-semiboldTa5d6ff"Ta5d6ff>{{ Te6edf3$t("interface.enable") Ta5d6ff}}</span>
Ta5d6ff</button>
Ta5d6ff<div Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffrelative z-50 shrink-0Ta5d6ff"Ta5d6ff>
Ta5d6ff<DropDownMenu>
Ta5d6ff<template Ta5d6ff#button>
Ta5d6ff<IconButton>
Ta5d6ff<MaterialDesignIcon Ta5d6fficon-nameTb4b4b4=Ta5d6ff"Ta5d6ffdots-verticalTa5d6ff" Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffw-5 h-5Ta5d6ff" Ta5d6ff/>
Ta5d6ff</IconButton>
Ta5d6ff</template>
Ta5d6ff<template Ta5d6ff#items>
Ta5d6ff<div Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffmax-h-60 overflow-auto py-1 space-y-1Ta5d6ff"Ta5d6ff>
Ta5d6ff<DropDownMenuItem Ta5d6ff@clickTb4b4b4=Ta5d6ff"Ta5d6ffeditInterfaceTa5d6ff"Ta5d6ff>
Ta5d6ff<MaterialDesignIcon Ta5d6fficon-nameTb4b4b4=Ta5d6ff"Ta5d6ffpencilTa5d6ff" Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffw-5 h-5Ta5d6ff" Ta5d6ff/>
Ta5d6ff<span>{{ Te6edf3$t("interface.edit_interface") Ta5d6ff}}</span>
Ta5d6ff</DropDownMenuItem>
Ta5d6ff<DropDownMenuItem Ta5d6ff@clickTb4b4b4=Ta5d6ff"Ta5d6ffexportInterfaceTa5d6ff"Ta5d6ff>
Ta5d6ff<MaterialDesignIcon Ta5d6fficon-nameTb4b4b4=Ta5d6ff"Ta5d6ffexportTa5d6ff" Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffw-5 h-5Ta5d6ff" Ta5d6ff/>
Ta5d6ff<span>{{ Te6edf3$t("interface.export_interface") Ta5d6ff}}</span>
Ta5d6ff</DropDownMenuItem>
Ta5d6ff<DropDownMenuItem Ta5d6ff@clickTb4b4b4=Ta5d6ff"Ta5d6ffdeleteInterfaceTa5d6ff"Ta5d6ff>
Ta5d6ff<MaterialDesignIcon Ta5d6fficon-nameTb4b4b4=Ta5d6ff"Ta5d6fftrash-canTa5d6ff" Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffw-5 h-5 text-red-500Ta5d6ff" Ta5d6ff/>
Ta5d6ff<span Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6fftext-red-500Ta5d6ff"Ta5d6ff>{{ Te6edf3$t("interface.delete_interface") Ta5d6ff}}</span>
Ta5d6ff</DropDownMenuItem>
Ta5d6ff</div>
Ta5d6ff</template>
Ta5d6ff</DropDownMenu>
Ta5d6ff</div>
Ta5d6ff</div>
Ta5d6ff</div>

Ta5d6ff<div
Ta5d6ffv-ifTb4b4b4=Ta5d6ff"Ta5d6ff['UDPInterface', 'RNodeInterface'].includes(iface.type)Ta5d6ff"
Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffmt-4 grid gap-2 text-sm text-gray-700 dark:text-gray-300Ta5d6ff"
Ta5d6ff>
Ta5d6ff<div Ta5d6ffv-ifTb4b4b4=Ta5d6ff"Ta5d6ffiface.type === 'UDPInterface'Ta5d6ff" Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffdetail-gridTa5d6ff"Ta5d6ff>
Ta5d6ff<div>
Ta5d6ff<div Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffdetail-labelTa5d6ff"Ta5d6ff>{{ Te6edf3$t("interface.listen") Ta5d6ff}}</div>
Ta5d6ff<div Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffdetail-value min-w-0 break-allTa5d6ff"Ta5d6ff>{{ Ta5d6ffiface.listen_ip Te6edf3}}Tb4b4b4:Ta5d6ff{{ Ta5d6ffiface.listen_port Ta5d6ff}}</div>
Ta5d6ff</div>
Ta5d6ff<div>
Ta5d6ff<div Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffdetail-labelTa5d6ff"Ta5d6ff>{{ Te6edf3$t("interface.forward") Ta5d6ff}}</div>
Ta5d6ff<div Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffdetail-value min-w-0 break-allTa5d6ff"Ta5d6ff>{{ Ta5d6ffiface.forward_ip Te6edf3}}Tb4b4b4:Ta5d6ff{{ Ta5d6ffiface.forward_port Ta5d6ff}}</div>
Ta5d6ff</div>
Ta5d6ff</div>
Ta5d6ff<div Ta5d6ffv-else-ifTb4b4b4=Ta5d6ff"Ta5d6ffiface.type === 'RNodeInterface'Ta5d6ff" Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffdetail-gridTa5d6ff"Ta5d6ff>
Ta5d6ff<div>
Ta5d6ff<div Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffdetail-labelTa5d6ff"Ta5d6ff>{{ Te6edf3$t("interface.port") Ta5d6ff}}</div>
Ta5d6ff<div Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffdetail-value min-w-0 break-allTa5d6ff"Ta5d6ff>{{ Ta5d6ffiface.port Ta5d6ff}}</div>
Ta5d6ff</div>
Ta5d6ff<div>
Ta5d6ff<div Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffdetail-labelTa5d6ff"Ta5d6ff>{{ Te6edf3$t("interface.frequency") Ta5d6ff}}</div>
Ta5d6ff<div Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffdetail-value min-w-0 break-allTa5d6ff"Ta5d6ff>{{ Ta5d6ffformatFrequency(iface.frequency) Ta5d6ff}}</div>
Ta5d6ff</div>
Ta5d6ff<div>
Ta5d6ff<div Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffdetail-labelTa5d6ff"Ta5d6ff>{{ Te6edf3$t("interface.bandwidth") Ta5d6ff}}</div>
Ta5d6ff<div Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffdetail-value min-w-0 break-allTa5d6ff"Ta5d6ff>{{ Ta5d6ffformatFrequency(iface.bandwidth) Ta5d6ff}}</div>
Ta5d6ff</div>
Ta5d6ff<div>
Ta5d6ff<div Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffdetail-labelTa5d6ff"Ta5d6ff>{{ Te6edf3$t("interface.spreading_factor") Ta5d6ff}}</div>
Ta5d6ff<div Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffdetail-value min-w-0 break-allTa5d6ff"Ta5d6ff>{{ Ta5d6ffiface.spreadingfactor Ta5d6ff}}</div>
Ta5d6ff</div>
Ta5d6ff<div>
Ta5d6ff<div Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffdetail-labelTa5d6ff"Ta5d6ff>{{ Te6edf3$t("interface.coding_rate") Ta5d6ff}}</div>
Ta5d6ff<div Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffdetail-value min-w-0 break-allTa5d6ff"Ta5d6ff>{{ Ta5d6ffiface.codingrate Ta5d6ff}}</div>
Ta5d6ff</div>
Ta5d6ff<div>
Ta5d6ff<div Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffdetail-labelTa5d6ff"Ta5d6ff>{{ Te6edf3$t("interface.txpower") Ta5d6ff}}</div>
Ta5d6ff<div Tff7b72classTb4b4b4=Ta5d6ff"Ta5d6ffdetail-value min-w-0 break-allTa5d6ff"Ta5d6ff>{{ Ta5d6ffiface.txpower Ta5d6ff}} Ta5d6ffdBm</div>
Ta5d6ff</div>
Ta5d6ff</div>
Ta5d6ff</div>
Ta5d6ff</div>
Ta5d6ff</template>

Ta5d6ff<script>
Ta5d6ffimport Ta5d6ffDialogUtils Tff7b72from Ta5d6ff"Ta5d6ff../../js/DialogUtilsTa5d6ff"T8b949e;
Ta5d6ffimport Ta5d6ffUtils Tff7b72from Ta5d6ff"Ta5d6ff../../js/UtilsTa5d6ff"T8b949e;
Ta5d6ffimport Ta5d6ffDropDownMenuItem Tff7b72from Ta5d6ff"Ta5d6ff../DropDownMenuItem.vueTa5d6ff"T8b949e;
Ta5d6ffimport Ta5d6ffIconButton Tff7b72from Ta5d6ff"Ta5d6ff../IconButton.vueTa5d6ff"T8b949e;
Ta5d6ffimport Ta5d6ffDropDownMenu Tff7b72from Ta5d6ff"Ta5d6ff../DropDownMenu.vueTa5d6ff"T8b949e;
Ta5d6ffimport Ta5d6ffMaterialDesignIcon Tff7b72from Ta5d6ff"Ta5d6ff../MaterialDesignIcon.vueTa5d6ff"T8b949e;

Ta5d6ffexport Tff7b72default Ta5d6ff{
Te6edf3nameTb4b4b4: Ta5d6ff"Ta5d6ffInterfaceTa5d6ff"Ta5d6ff,
Te6edf3componentsTb4b4b4: Ta5d6ff{
Ta5d6ffDropDownMenu,
Ta5d6ffIconButton,
Ta5d6ffDropDownMenuItem,
Ta5d6ffMaterialDesignIcon,
Ta5d6ff},
Te6edf3propsTb4b4b4: Ta5d6ff{
Te6edf3ifaceTb4b4b4: Ta5d6ff{
Te6edf3typeTb4b4b4: Ta5d6ffObject,
Te6edf3requiredTb4b4b4: Ta5d6fftrue,
Ta5d6ff},
Te6edf3isReticulumRunningTb4b4b4: Ta5d6ff{
Te6edf3typeTb4b4b4: Ta5d6ffBoolean,
Tff7b72defaultTb4b4b4: Te6edf3true,
Ta5d6ff},
Ta5d6ff},
Te6edf3emitsTb4b4b4: Ta5d6ff["enable", Ta5d6ff"Ta5d6ffdisableTa5d6ff"Ta5d6ff, Ta5d6ff"Ta5d6ffeditTa5d6ff"Ta5d6ff, Ta5d6ff"Ta5d6ffexportTa5d6ff"Ta5d6ff, Ta5d6ff"Ta5d6ffdeleteTa5d6ff"Ta5d6ff],
Ta5d6ffdata() Ta5d6ff{
Tff7b72return Ta5d6ff{};
Ta5d6ff},
Te6edf3computedTb4b4b4: Ta5d6ff{
Ta5d6fficonName() Ta5d6ff{
Ta5d6ffswitch Ta5d6ff(this.iface.type) Ta5d6ff{
Ta5d6ffcase Ta5d6ff"Ta5d6ffAutoInterfaceTa5d6ff"Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffhome-automationTa5d6ff"T8b949e;
Ta5d6ffcase Ta5d6ff"Ta5d6ffRNodeInterfaceTa5d6ff"Tb4b4b4:
Tff7b72return Ta5d6ffthis.iface.port Ta5d6ff&& Te6edf3this.iface.port.startsWith("tcpTb4b4b4:Ta5d6ff//") Ta5d6ff? Ta5d6ff"Ta5d6fflan-connectTa5d6ff" Tb4b4b4: Ta5d6ff"Ta5d6ffradio-towerTa5d6ff"T8b949e;
Ta5d6ffcase Ta5d6ff"Ta5d6ffRNodeMultiInterfaceTa5d6ff"Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffaccess-point-networkTa5d6ff"T8b949e;
Ta5d6ffcase Ta5d6ff"Ta5d6ffTCPClientInterfaceTa5d6ff"Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6fflan-connectTa5d6ff"T8b949e;
Ta5d6ffcase Ta5d6ff"Ta5d6ffTCPServerInterfaceTa5d6ff"Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6fflanTa5d6ff"T8b949e;
Ta5d6ffcase Ta5d6ff"Ta5d6ffUDPInterfaceTa5d6ff"Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffwanTa5d6ff"T8b949e;
Ta5d6ffcase Ta5d6ff"Ta5d6ffSerialInterfaceTa5d6ff"Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffusb-portTa5d6ff"T8b949e;
Ta5d6ffcase Ta5d6ff"Ta5d6ffKISSInterfaceTa5d6ff"Tb4b4b4:
Ta5d6ffcase Ta5d6ff"Ta5d6ffAX25KISSInterfaceTa5d6ff"Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffantennaTa5d6ff"T8b949e;
Ta5d6ffcase Ta5d6ff"Ta5d6ffI2PInterfaceTa5d6ff"Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffeyeTa5d6ff"T8b949e;
Ta5d6ffcase Ta5d6ff"Ta5d6ffPipeInterfaceTa5d6ff"Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffpipeTa5d6ff"T8b949e;
Tff7b72defaultTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffserver-networkTa5d6ff"T8b949e;
Ta5d6ff}
Ta5d6ff},
Ta5d6ffdescription() Ta5d6ff{
Ta5d6ffif Ta5d6ff(this.iface.type Tb4b4b4=Tb4b4b4=Tb4b4b4= Ta5d6ff"Ta5d6ffTCPClientInterfaceTa5d6ff"Ta5d6ff) Ta5d6ff{
Tff7b72return Te6edf3`${this.iface.target_host}Tb4b4b4:Te6edf3${this.iface.target_port}`;
Ta5d6ff}
Ta5d6ffif Ta5d6ff(this.iface.type Tb4b4b4=Tb4b4b4=Tb4b4b4= Ta5d6ff"Ta5d6ffTCPServerInterfaceTa5d6ff" Ta5d6ff|| Ta5d6ffthis.iface.type Tb4b4b4=Tb4b4b4=Tb4b4b4= Ta5d6ff"Ta5d6ffUDPInterfaceTa5d6ff"Ta5d6ff) Ta5d6ff{
Tff7b72return Te6edf3`${this.iface.listen_ip}Tb4b4b4:Te6edf3${this.iface.listen_port}`;
Ta5d6ff}
Ta5d6ffif Ta5d6ff(this.iface.type Tb4b4b4=Tb4b4b4=Tb4b4b4= Ta5d6ff"Ta5d6ffSerialInterfaceTa5d6ff"Ta5d6ff) Ta5d6ff{
Tff7b72return Ta5d6ff`${this.iface.port} Ta5d6ff@ Te6edf3${this.iface.speed Ta5d6ff|| Ta5d6ff"Ta5d6ff9600Ta5d6ff"Ta5d6ff}bps`;
Ta5d6ff}
Ta5d6ffif Ta5d6ff(this.iface.type Tb4b4b4=Tb4b4b4=Tb4b4b4= Ta5d6ff"Ta5d6ffRNodeInterfaceTa5d6ff" Ta5d6ff&& Ta5d6ffthis.iface.port Ta5d6ff&& Te6edf3this.iface.port.startsWith("tcpTb4b4b4:Ta5d6ff//")) Ta5d6ff{
Tff7b72return Ta5d6ff`RNode Ta5d6ffover Ta5d6ffIP Ta5d6ff@ Te6edf3${this.iface.port.replace("tcpTb4b4b4:Te6edf3//", Ta5d6ff"Ta5d6ff"Ta5d6ff)}`;
Ta5d6ff}
Ta5d6ffif Ta5d6ff(this.iface.type Tb4b4b4=Tb4b4b4=Tb4b4b4= Ta5d6ff"Ta5d6ffAutoInterfaceTa5d6ff"Ta5d6ff) Ta5d6ff{
Tff7b72return Ta5d6ff"Ta5d6ffAuto-detect Ethernet and Wi-Fi peersTa5d6ff"T8b949e;
Ta5d6ff}
Ta5d6ffif Ta5d6ff(this.iface.type Tb4b4b4=Tb4b4b4=Tb4b4b4= Ta5d6ff"Ta5d6ffBackboneInterfaceTa5d6ff"Ta5d6ff) Ta5d6ff{
Ta5d6ffif Ta5d6ff(this.isBackboneIfacTunnel) Ta5d6ff{
Tff7b72return Ta5d6ff"Ta5d6ffBackbone (IFAC tunnel)Ta5d6ff"T8b949e;
Ta5d6ff}
Ta5d6ffconst Ta5d6ffremote Tb4b4b4= Ta5d6ffthis.iface.remote Ta5d6ff|| Ta5d6ffthis.iface.target_host;
Ta5d6ffconst Ta5d6ffport Tb4b4b4= Ta5d6ffthis.iface.target_port Ta5d6ff?? Ta5d6ffthis.iface.listen_port;
Ta5d6ffif Ta5d6ff(remote Ta5d6ff&& Ta5d6ffport Ta5d6ff!Tb4b4b4= Ta5d6ffnull Ta5d6ff&& Ta5d6ffport Ta5d6ff!Tb4b4b4=Tb4b4b4= Ta5d6ff"Ta5d6ff"Ta5d6ff) Ta5d6ff{
Tff7b72return Te6edf3`${remote}Tb4b4b4:Te6edf3${port}`;
Ta5d6ff}
Ta5d6ffconst Ta5d6fflistenIp Tb4b4b4= Ta5d6ffthis.iface.listen_ip;
Ta5d6ffif Ta5d6ff((listenIp Ta5d6ff|| Ta5d6fflistenIp Tb4b4b4=Tb4b4b4=Tb4b4b4= Ta5d6ff"Ta5d6ff"Ta5d6ff) Ta5d6ff&& Ta5d6ffport Ta5d6ff!Tb4b4b4= Ta5d6ffnull Ta5d6ff&& Ta5d6ffport Ta5d6ff!Tb4b4b4=Tb4b4b4= Ta5d6ff"Ta5d6ff"Ta5d6ff) Ta5d6ff{
Tff7b72return Ta5d6ff`${listenIp Ta5d6ff|| Ta5d6ff"Ta5d6ff0.0.0.0Ta5d6ff"Te6edf3}Tb4b4b4:Te6edf3${port}`;
Ta5d6ff}
Tff7b72return Ta5d6ff"Ta5d6ffBackbone (public relay)Ta5d6ff"T8b949e;
Ta5d6ff}
Tff7b72return Ta5d6ffthis.iface.description Ta5d6ff|| Ta5d6ff"Ta5d6ffCustom interfaceTa5d6ff"T8b949e;
Ta5d6ff},
Ta5d6ffstatusChipClass() Ta5d6ff{
Tff7b72return Ta5d6ffthis.isInterfaceEnabled(this.iface)
Ta5d6ff? Ta5d6ff"Ta5d6ffinline-flex items-center rounded-full bg-green-100 text-green-700 px-2 py-0.5 text-xs font-semiboldTa5d6ff"
Tb4b4b4: Ta5d6ff"Ta5d6ffinline-flex items-center rounded-full bg-red-100 text-red-700 px-2 py-0.5 text-xs font-semiboldTa5d6ff"T8b949e;
Ta5d6ff},
Ta5d6ffifaceLinkStatusKey() Ta5d6ff{
Ta5d6ffconst Ta5d6ffv Tb4b4b4= Ta5d6ffthis.normalizedIfaceLinkUp;
Ta5d6ffif Ta5d6ff(v Tb4b4b4=Tb4b4b4=Tb4b4b4= Ta5d6fftrue) Tff7b72return Ta5d6ff"Ta5d6ffupTa5d6ff"T8b949e;
Ta5d6ffif Ta5d6ff(v Tb4b4b4=Tb4b4b4=Tb4b4b4= Ta5d6fffalse) Tff7b72return Ta5d6ff"Ta5d6ffdownTa5d6ff"T8b949e;
Tff7b72return Ta5d6ffnull;
Ta5d6ff},
Ta5d6ffifaceLinkStatusLabel() Ta5d6ff{
Ta5d6ffconst Ta5d6ffkey Tb4b4b4= Ta5d6ffthis.ifaceLinkStatusKey;
Ta5d6ffif Ta5d6ff(key Tb4b4b4=Tb4b4b4=Tb4b4b4= Ta5d6ff"Ta5d6ffupTa5d6ff"Ta5d6ff) Tff7b72return Ta5d6ffthis.$t("interface.link_up");
Ta5d6ffif Ta5d6ff(key Tb4b4b4=Tb4b4b4=Tb4b4b4= Ta5d6ff"Ta5d6ffdownTa5d6ff"Ta5d6ff) Tff7b72return Ta5d6ffthis.$t("interface.link_down");
Tff7b72return Ta5d6ffthis.$t("interface.link_unknown");
Ta5d6ff},
Ta5d6ffifaceLinkStatusChipClass() Ta5d6ff{
Ta5d6ffconst Ta5d6ffkey Tb4b4b4= Ta5d6ffthis.ifaceLinkStatusKey;
Ta5d6ffif Ta5d6ff(key Tb4b4b4=Tb4b4b4=Tb4b4b4= Ta5d6ff"Ta5d6ffupTa5d6ff"Ta5d6ff) Ta5d6ff{
Tff7b72return Ta5d6ff"Ta5d6ffinline-flex items-center rounded-full bg-emerald-100 text-emerald-800 dark:bg-emerald-900/45 dark:text-emerald-100 px-2 py-0.5 text-xs font-semiboldTa5d6ff"T8b949e;
Ta5d6ff}
Ta5d6ffif Ta5d6ff(key Tb4b4b4=Tb4b4b4=Tb4b4b4= Ta5d6ff"Ta5d6ffdownTa5d6ff"Ta5d6ff) Ta5d6ff{
Tff7b72return Ta5d6ff"Ta5d6ffinline-flex items-center rounded-full bg-amber-100 text-amber-900 dark:bg-amber-900/40 dark:text-amber-100 px-2 py-0.5 text-xs font-semiboldTa5d6ff"T8b949e;
Ta5d6ff}
Tff7b72return Ta5d6ff"Ta5d6ffinline-flex items-center rounded-full bg-gray-100 text-gray-700 dark:bg-zinc-800 dark:text-zinc-300 px-2 py-0.5 text-xs font-semiboldTa5d6ff"T8b949e;
Ta5d6ff},
Ta5d6ffnormalizedIfaceLinkUp() Ta5d6ff{
Ta5d6ffif Ta5d6ff(!this.isReticulumRunning Ta5d6ff|| Ta5d6ff!this.isInterfaceEnabled(this.iface)) Ta5d6ff{
Tff7b72return Ta5d6ffnull;
Ta5d6ff}
Ta5d6ffconst Ta5d6ffst Tb4b4b4= Ta5d6ffthis.iface._stats;
Ta5d6ffif Ta5d6ff(!st Ta5d6ff|| Ta5d6fftypeof Ta5d6ffst Ta5d6ff!Tb4b4b4=Tb4b4b4= Ta5d6ff"Ta5d6ffobjectTa5d6ff"Ta5d6ff) Ta5d6ff{
Ta5d6ff// Ta5d6ffIf Ta5d6ffstats Ta5d6ffare Ta5d6ffmissing, Ta5d6ffthe Tff7b72interface Tff7b72is Te6edf3likely Tffa657detached Ta5d6ffor
Ta5d6ff// Ta5d6ffnot Ta5d6ffyet Ta5d6ffinitialised, Ta5d6ffso Ta5d6ffshow Ta5d6ffdown Ta5d6ffrather Ta5d6ffthan Ta5d6ffunknown.
Tff7b72return Ta5d6fffalse;
Ta5d6ff}
Ta5d6ffif Ta5d6ff("status" Ta5d6ffin Ta5d6ffst) Ta5d6ff{
Ta5d6ffconst Ta5d6ffs Tb4b4b4= Ta5d6ffst.status;
Ta5d6ffif Ta5d6ff(s Tb4b4b4=Tb4b4b4=Tb4b4b4= Ta5d6fftrue) Tff7b72return Ta5d6fftrue;
Ta5d6ffif Ta5d6ff(s Tb4b4b4=Tb4b4b4=Tb4b4b4= Ta5d6fffalse) Tff7b72return Ta5d6fffalse;
Ta5d6ffif Ta5d6ff(typeof Ta5d6ffs Tb4b4b4=Tb4b4b4=Tb4b4b4= Ta5d6ff"Ta5d6ffstringTa5d6ff"Ta5d6ff) Ta5d6ff{
Ta5d6ffconst Ta5d6fft Tb4b4b4= Ta5d6ffs.toLowerCase();
Ta5d6ffif Ta5d6ff(t Tb4b4b4=Tb4b4b4=Tb4b4b4= Ta5d6ff"Ta5d6ffupTa5d6ff"Ta5d6ff) Tff7b72return Ta5d6fftrue;
Ta5d6ffif Ta5d6ff(t Tb4b4b4=Tb4b4b4=Tb4b4b4= Ta5d6ff"Ta5d6ffdownTa5d6ff"Ta5d6ff) Tff7b72return Ta5d6fffalse;
Ta5d6ff}
Ta5d6ff}
Ta5d6ffif Ta5d6ff(st.connected Tb4b4b4=Tb4b4b4=Tb4b4b4= Ta5d6fftrue Ta5d6ff|| Ta5d6ffst.online Tb4b4b4=Tb4b4b4=Tb4b4b4= Ta5d6fftrue) Tff7b72return Ta5d6fftrue;
Ta5d6ffif Ta5d6ff(st.connected Tb4b4b4=Tb4b4b4=Tb4b4b4= Ta5d6fffalse Ta5d6ff|| Ta5d6ffst.online Tb4b4b4=Tb4b4b4=Tb4b4b4= Ta5d6fffalse) Tff7b72return Ta5d6fffalse;
Tff7b72return Ta5d6ffnull;
Ta5d6ff},
Ta5d6ffisBackboneIfacTunnel() Ta5d6ff{
Ta5d6ffif Ta5d6ff(this.iface.type Ta5d6ff!Tb4b4b4=Tb4b4b4= Ta5d6ff"Ta5d6ffBackboneInterfaceTa5d6ff"Ta5d6ff) Ta5d6ff{
Tff7b72return Ta5d6fffalse;
Ta5d6ff}
Ta5d6ffif Ta5d6ff(this.iface._stats?.ifac_signature) Ta5d6ff{
Tff7b72return Ta5d6fftrue;
Ta5d6ff}
Tff7b72return Ta5d6ffBoolean(
Ta5d6ffthis.iface.passphrase Ta5d6ff|| Ta5d6ffthis.iface.network_name Ta5d6ff|| Ta5d6ffthis.iface.ifac_netname Ta5d6ff|| Ta5d6ffthis.iface.ifac_netkey
Ta5d6ff);
Ta5d6ff},
Ta5d6ff},
Te6edf3methodsTb4b4b4: Ta5d6ff{
Te6edf3onIFACSignatureClickTb4b4b4: Ta5d6fffunction Ta5d6ff(ifacSignature) Ta5d6ff{
Ta5d6ffDialogUtils.alert(ifacSignature);
Ta5d6ff},
Ta5d6ffisDiscoverable() Ta5d6ff{
Ta5d6ffconst Ta5d6ffvalue Tb4b4b4= Ta5d6ffthis.iface.discoverable;
Ta5d6ffif Ta5d6ff(typeof Ta5d6ffvalue Tb4b4b4=Tb4b4b4=Tb4b4b4= Ta5d6ff"Ta5d6ffstringTa5d6ff"Ta5d6ff) Ta5d6ff{
Tff7b72return Ta5d6ff["true", Ta5d6ff"Ta5d6ffyesTa5d6ff"Ta5d6ff, Ta5d6ff"Ta5d6ff1Ta5d6ff"Ta5d6ff, Ta5d6ff"Ta5d6ffonTa5d6ff"Ta5d6ff].includes(value.toLowerCase());
Ta5d6ff}
Tff7b72return Ta5d6ffBoolean(value);
Ta5d6ff},
Te6edf3isInterfaceEnabledTb4b4b4: Ta5d6fffunction Ta5d6ff(iface) Ta5d6ff{
Tff7b72return Ta5d6ffUtils.isInterfaceEnabled(iface);
Ta5d6ff},
Ta5d6ffenableInterface() Ta5d6ff{
Ta5d6ffthis.$emit("enable");
Ta5d6ff},
Ta5d6ffdisableInterface() Ta5d6ff{
Ta5d6ffthis.$emit("disable");
Ta5d6ff},
Ta5d6ffeditInterface() Ta5d6ff{
Ta5d6ffthis.$emit("edit");
Ta5d6ff},
Ta5d6ffexportInterface() Ta5d6ff{
Ta5d6ffthis.$emit("export");
Ta5d6ff},
Ta5d6ffdeleteInterface() Ta5d6ff{
Ta5d6ffthis.$emit("delete");
Ta5d6ff},
Te6edf3formatBitsPerSecondTb4b4b4: Ta5d6fffunction Ta5d6ff(bits) Ta5d6ff{
Tff7b72return Ta5d6ffUtils.formatBitsPerSecond(bits);
Ta5d6ff},
Te6edf3formatBytesTb4b4b4: Ta5d6fffunction Ta5d6ff(bytes) Ta5d6ff{
Tff7b72return Ta5d6ffUtils.formatBytes(bytes);
Ta5d6ff},
Ta5d6ffformatFrequency(hz) Ta5d6ff{
Tff7b72return Ta5d6ffUtils.formatFrequency(hz);
Ta5d6ff},
Ta5d6ffisIfaceStatBytesZero(field) Ta5d6ff{
Ta5d6ffconst Ta5d6ffst Tb4b4b4= Ta5d6ffthis.iface._stats;
Ta5d6ffif Ta5d6ff(!st) Ta5d6ff{
Tff7b72return Ta5d6fffalse;
Ta5d6ff}
Ta5d6ffconst Ta5d6ffraw Tb4b4b4= Ta5d6ffst[field];
Ta5d6ffconst Ta5d6ffn Tb4b4b4= Ta5d6ffraw Tb4b4b4=Tb4b4b4= Ta5d6ffnull Ta5d6ff? T79c0ff0 Tb4b4b4: Te6edf3Number(raw);
Tff7b72return Ta5d6ff(Number.isFinite(n) Ta5d6ff? Te6edf3n Tb4b4b4: Ta5d6ff0) Tb4b4b4=Tb4b4b4=Tb4b4b4= Ta5d6ff0;
Ta5d6ff},
Ta5d6ff},
Ta5d6ff};
Ta5d6ff</script>

Ta5d6ff<style Ta5d6ffscoped>
Ta5d6ff@reference Ta5d6ff"Ta5d6ff../../style.cssTa5d6ff"T8b949e;
Ta5d6ff.interface-card Ta5d6ff{
Ta5d6ff@apply Ta5d6ffrelative Ta5d6ffbg-white/95 Te6edf3darkTb4b4b4:Ta5d6ffbg-zinc-900/85 Ta5d6ffbackdrop-blur-sm Ta5d6ffborder Ta5d6ffborder-gray-200 Te6edf3darkTb4b4b4:Ta5d6ffborder-zinc-800 Ta5d6ffrounded-3xl Ta5d6ffshadow-lg Ta5d6ffp-4 Ta5d6ffspace-y-3 Te6edf3hoverTb4b4b4:Ta5d6ffz-10 Ta5d6ffmin-w-0;
Te6edf3overflowTb4b4b4: Ta5d6ffvisible;
Ta5d6ff}
Ta5d6ff.interface-card__icon Ta5d6ff{
Ta5d6ff@apply Ta5d6ffw-12 Ta5d6ffh-12 Ta5d6ffrounded-2xl Ta5d6ffbg-blue-50 Ta5d6fftext-blue-600 Te6edf3darkTb4b4b4:Ta5d6ffbg-blue-900/40 Te6edf3darkTb4b4b4:Ta5d6fftext-blue-200 Ta5d6ffflex Ta5d6ffitems-center Ta5d6ffjustify-center;
Ta5d6ff}
Ta5d6ff.type-chip Ta5d6ff{
Ta5d6ff@apply Ta5d6ffinline-flex Ta5d6ffitems-center Ta5d6ffrounded-full Ta5d6ffbg-gray-100 Te6edf3darkTb4b4b4:Ta5d6ffbg-zinc-800 Ta5d6ffpx-2 Ta5d6ffpy-0.5 Ta5d6fftext-xs Ta5d6fffont-semibold Ta5d6fftext-gray-600 Te6edf3darkTb4b4b4:Ta5d6fftext-gray-200;
Ta5d6ff}
Ta5d6ff.stat-chip Ta5d6ff{
Ta5d6ff@apply Ta5d6ffinline-flex Ta5d6ffitems-center Ta5d6ffrounded-full Ta5d6ffborder Ta5d6ffborder-gray-200 Te6edf3darkTb4b4b4:Ta5d6ffborder-zinc-700 Ta5d6ffpx-2 Ta5d6ffpy-0.5;
Ta5d6ff}
Ta5d6ff.stat-chip--zero-traffic Ta5d6ff{
Ta5d6ff@apply Ta5d6ffborder-red-400 Ta5d6ffbg-red-50 Ta5d6fftext-red-800 Te6edf3darkTb4b4b4:Ta5d6ffborder-red-700 Te6edf3darkTb4b4b4:Ta5d6ffbg-red-950/50 Te6edf3darkTb4b4b4:Ta5d6fftext-red-200 Ta5d6fffont-semibold;
Ta5d6ff}
Ta5d6ff.ifac-line Ta5d6ff{
Ta5d6ff@apply Ta5d6fftext-xs Ta5d6ffflex Ta5d6ffflex-wrap Ta5d6ffitems-center Ta5d6ffgap-1;
Ta5d6ff}
Ta5d6ff.discoverable-chip Ta5d6ff{
Ta5d6ff@apply Ta5d6ffinline-flex Ta5d6ffitems-center Ta5d6ffrounded-full Ta5d6ffbg-blue-100 Ta5d6fftext-blue-700 Ta5d6ffpx-2 Ta5d6ffpy-0.5 Ta5d6fftext-xs Ta5d6fffont-semibold Te6edf3darkTb4b4b4:Ta5d6ffbg-blue-900/50 Te6edf3darkTb4b4b4:Ta5d6fftext-blue-200;
Ta5d6ff}
Ta5d6ff.detail-grid Ta5d6ff{
Ta5d6ff@apply Ta5d6ffgrid Ta5d6ffgap-3 Te6edf3smTb4b4b4:Ta5d6ffgrid-cols-2;
Ta5d6ff}
Ta5d6ff.detail-label Ta5d6ff{
Ta5d6ff@apply Ta5d6fftext-xs Ta5d6ffuppercase Ta5d6fftracking-wide Ta5d6fftext-gray-500 Te6edf3darkTb4b4b4:Ta5d6fftext-gray-400;
Ta5d6ff}
Ta5d6ff.detail-value Ta5d6ff{
Ta5d6ff@apply Ta5d6fftext-sm Ta5d6fffont-medium Ta5d6fftext-gray-900 Te6edf3darkTb4b4b4:Ta5d6fftext-white Ta5d6ffmin-w-0 Ta5d6ffbreak-all;
Ta5d6ff}
Ta5d6ff</style>

Served by rngit 1.5.2 - Generated in 0.05s